Immagina i dati grezzi come un flusso non etichettato: un territorio selvaggio della memoria. In Rust, iniziamo gestendo i dati come blocchi contigui (fette e array). Questa transizione dai dati grezzi a schemi definiti segna lo spostamento dalla memoria anonima a strutture con uno scopo.
1. Il livello "grezzo"
Le fette e gli array rappresentano i dati nella loro forma più semplice. La sicurezza è mantenuta tramite verifiche di proprietà al momento del compilatore piuttosto che un sovraccarico in fase di esecuzione. Usando il prestito (&) ci permette di creare "visualizzazioni" dei dati senza spostare i valori.
2. Limiti semantici
Mentre le funzioni come first_word sono flessibili (accettando Stringa, &str, o letterali), raggiungono un limite semantico. Il compilatore sa che la memoria è sicura, ma non sa cosa rappresentino i dati rappresentano (ad esempio, un nome utente rispetto a un valore da sensore) fino a quando non li mappiamo a un Struct.